package com.wlk.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wlk.pojo.Project;
import com.wlk.pojo.dto.ProListDTO;
import com.wlk.pojo.dto.ProMoneyDTO;
import com.wlk.pojo.dto.ReimbSelProDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

@Mapper
public interface ProjectMapper extends BaseMapper<Project> {

    //1.查看部门是否已经绑定了项目
    Integer getProByDepCode(String depCode);

    //2.查看父级项目是否存在
    Integer getProByProParentCode(String proParentCode);

    //3. 查看项目代码是否已经存在
    Integer getProByProCode(String proCode);

    //4. 新增项目
    Integer addPro(Project project);

    List<ProListDTO> getProList();

    //5.查看是否为当前父级项目的第一个子项目
    Integer isFirstSon(@Param("proParentCode") String proParentCode);

    //6.更新金额操作
    Integer updateProMoney(@Param("proCode") String proCode, @Param("amountMoneyA") BigDecimal amountMoneyA, @Param("amountMoneyB") BigDecimal amountMoneyB, @Param("amountMoneyC") BigDecimal amountMoneyC,@Param("effectivAmountMoney") BigDecimal effectivAmountMoney);

    //7.获取同一层级的所有项目的四项金额统计和
    ProMoneyDTO getProMoneyList(@Param("proParentCode") String proParentCode);

    //8.将父级明细节点修改为非明细节点
    Integer updateProDetailed(@Param("proParentCode") String proParentCode);

    //9.根据项目代码获取有效金额
    BigDecimal getEffectivAmountMoneyByProCode(@Param("proCode") String proCode);

    //10.根据用户的id查询并返回项目列表
    List<ReimbSelProDTO> getGrantedProByUserId(@Param("userId") Integer userId);

    //11.也是和10一样，两个方法一起使用
    List<ReimbSelProDTO> getGrantedProByUserIdLinkedGrant(@Param("userId") Integer userId);

    //12.根据项目负责人id查询项目列表
    List<ProListDTO> getProListByHeaderId(@Param("headerId") Integer headerId);

    //13。根据项目代码删除项目
    Integer delProByProCode(@Param("proCode") String proCode);

    //14.查看项目是否存在子项目
    Integer isExistSonPro(@Param("proCode") String proCode);

    Project getProjectByProCode(@Param("proCode") String proCode);

    Integer checkSameLevelNodeByParentCode(@Param("likeParentCode") String likeParentCode, @Param("proLevel") Integer proLevel);

    Integer updateProDetailedSetOne(@Param("proParentCode") String proParentCode);
}
